home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / stdlib1.exe / lha / SHELL.ASM < prev    next >
Assembly Source File  |  1990-10-15  |  2KB  |  103 lines

  1. ;****************************************************************************
  2. ;
  3. ; SHELL.ASM-
  4. ;
  5. ;     This is a "typical" piece of starting code for the stdlib package.
  6. ;    Whenever you begin a new assembly language program you should start
  7. ;    with this code (or something similar to it).
  8. ;
  9. ;
  10. ; Global variables go here:
  11. ;
  12. dseg        segment    para public 'data'
  13. ;
  14. ; Insert your global variables in here.
  15. ;
  16. dseg        ends
  17. ;
  18. ;
  19. ;
  20. ;
  21. cseg        segment    para public 'code'
  22.         assume    cs:cseg, ds:dseg
  23. ;
  24.         include    stdlib.a
  25. ;
  26. ; lesi- macro to do a "les di, constant"
  27. ;
  28. lesi        macro    adrs
  29.         mov     di, seg adrs
  30.         mov    es, di
  31.         lea    di, adrs
  32.         endm
  33. ;
  34. ; ldxi- macro to do a "ldx si, constant" operation.
  35. ;
  36. ldxi        macro    adrs
  37.         mov    dx, seg adrs
  38.         lea    si, adrs
  39.         endm
  40. ;
  41. ; Variables that wind up being used by the standard library routines.
  42. ; The MemInit routine uses "PSP" and "zzzzzzseg" labels.  They must be
  43. ; present if you intend to use getenv, MemInit, malloc, and free.
  44. ;
  45. ;
  46.         public    PSP
  47. PSP        dw    ?            ;Must be in CODE segment!
  48. ;
  49. ;
  50. ; Some useful constants:
  51. ;
  52. cr        equ    13
  53. lf        equ    10
  54. eos        equ    0
  55. ;
  56. true        equ    1
  57. false        equ    0
  58. ;
  59. ;
  60. ; Main is the main program.  Program execution always begins here.
  61. ;
  62. Main        proc
  63.         mov    cs:PSP, es        ;Save pgm seg prefix
  64.         mov    ax, seg dseg        ;Set up the segment registers
  65.         mov    ds, ax
  66.         mov    es, ax
  67.         mov    dx, 0            ;Allocate all available RAM.
  68.         MemInit
  69. ;
  70. ; Insert your main program here:
  71. ;
  72. Quit:        mov     ah, 4ch
  73.         int     21h
  74. ;
  75. Main        endp
  76. ;
  77. ;
  78. ;
  79. ; Insert other procedures and functions down here.
  80. ;
  81. ;
  82. ;
  83. cseg            ends
  84. ;
  85. ;
  86. ; Allocate a reasonable amount of space for the stack (2k).
  87. ;
  88. sseg        segment    para stack 'stack'
  89. stk        db    256 dup ("stack   ")
  90. sseg        ends
  91. ;
  92. ;
  93. ;
  94. ; zzzzzzseg must be the last segment that gets loaded into memory!
  95. ; WARNING! Do not insert any segments (or other code/data) after
  96. ; this segment.
  97. ;
  98. zzzzzzseg    segment    para public 'zzzzzz'
  99. LastBytes    db    16 dup (?)
  100. heap        db    1024 dup (?)    ;Gets grabbed by Mem Mgr anyway!
  101. zzzzzzseg    ends
  102.         end    Main
  103.